﻿using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;

using System.Text;
using System.Windows.Forms;
using System.Collections;
using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
using System.Threading;

namespace INSAForManagers
{
    public partial class FormMultiGather : Form
    {

        FormMain parent;

        public FormMultiGather(FormMain p)
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
            parent = p;
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void readMTargetXlsFile()
        {

            string valuer_code = Util.OSheet.get_Range("B2", Missing.Value).Value2.ToString();
            string valuer_name = Util.OSheet.get_Range("H2", Missing.Value).Value2.ToString();

            lblMsg.Text += "(평가자 : " + valuer_name + ")";

            insertMultiInfo(valuer_code);

        }

        private void insertMultiInfo(string valuer_code)
        {
            try
            {
                //다면평가대상자 유형별 인원수
                int targetCount = DBUtil.getMTargetCount(getTargetType());

                //루프 최대값 결정
                int cnt = 0;
                if (getTargetType() != 0) cnt = 1;

                //일반의 경우 다면 평가자 본인은 제외되므로 대상자 수에서 1을 빼준다. 즉, targetCount는 제외하고 루프
                //일반 이외에는 전체에 대해 루프
                for (int i = 1; i < targetCount + cnt; i++) 
                {

                    Excel.Range range = Util.OSheet.get_Range("A" + (5 + i).ToString(), "I" + (5 + i).ToString());

                    object[,] tmp = (object[,])range.get_Value(Missing.Value);

                    for (int j = 1; j <= tmp.GetUpperBound(0); j++)
                    {
                        ArrayList data = new ArrayList();
                        data.Add(tmp[j, 1]);
                        data.Add(tmp[j, 2]);
                        data.Add(valuer_code);
                        data.Add(tmp[j, 4]);
                        data.Add(tmp[j, 5]);
                        data.Add(tmp[j, 6]);
                        data.Add(tmp[j, 7]);
                        data.Add(tmp[j, 8]);
                        data.Add(tmp[j, 9]);

                        if (DBUtil.isExistedMultiInfo(tmp[j, 2].ToString(), valuer_code) == true)
                        {
                            DBUtil.updateMultiInfo(data);                            
                            Thread.Sleep(50);
                        }
                        else
                        {
                            DBUtil.insertMultiInfo(data);
                            Thread.Sleep(50);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\n\n" + ex.StackTrace, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        //다면평가한 엑셀 파일 읽기
        private void readMTargetXlsFiles()
        {
            //읽어야 할 파일명 배열
            string[] fileNames = Config.FileNames;

            for (int i = 0; i < fileNames.Length; i++)
            {
                lblMsg.Text = (i + 1).ToString() + " 번째 파일을 읽고 있습니다...";

                if (fileNames[i].IndexOf((string)parent.tscTargetType.Items[parent.tscTargetType.SelectedIndex]) == -1)
                {
                    MessageBox.Show("현재 대상자 유형과 파일이 일치하는 지 확인하십시오.  ", "확인", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    btnClose.Enabled = true;
                    return;
                }

                if (Util.openXls(fileNames[i]) != null)
                {
                    //다면평가 엑셀 파일 읽기
                    readMTargetXlsFile();

                    //엑셀 파일 닫기(연 파일을 닫고 새로 열기)
                    Util.closeXls();
                }

            }
            
            //평가자 리스트
            Config.ValuerList = DBUtil.getValuerList();
            parent.stateRefresh();

            btnClose.Enabled = true;

            lblMsg.Text = "작업을 완료하였습니다. 이 창을 닫아주세요.";
            

        }

        private void btnOpen_Click(object sender, EventArgs e)
        {
            btnClose.Enabled = false;

            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "Microsoft Excel files (*.xls)|*.xls";
            dlg.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            dlg.Title = "다면평가표 엑셀 파일";
            dlg.Multiselect = true;
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    //읽어야할 파일명 배열을 저역변수레 설정
                    Config.FileNames = dlg.FileNames;

                    //쓰레드로 파일 읽기
                    Thread t = new Thread(new ThreadStart(readMTargetXlsFiles));
                    t.Start();

                    

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message + "\n\n" + ex.StackTrace, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    Util.closeXls();
                }
            }
            else {
                btnClose.Enabled = true;
            }

            
        }

        private void FormMultiGather_Load(object sender, EventArgs e)
        {

        }

        private byte getTargetType()
        {
            return (byte)parent.tscTargetType.SelectedIndex;
        }

    }
}
